package com.minglan.leetcode.java.solution2101;

import com.minglan.leetcode.java.pub.ListNode;

/*
 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。

请你将两个数相加，并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外，这两个数都不会以 0 开头。

 */
public class Solution2 {

	public static void main(String[] args) {
		Solution2 s = new Solution2();
		ListNode l1 = new ListNode(2,new ListNode(4,new ListNode(3)));
		ListNode l2 = new ListNode(5,new ListNode(6));
		ListNode ret = s.addTwoNumbers(l1, l2);
		System.out.println(ret);
	}

	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		if (l1 == null && l2 == null)
			return null;
		ListNode ret = new ListNode((l1 != null ? l1.val : 0) + (l2 != null ? l2.val : 0));
		ret.next = addTwoNumbers(l1 != null ? l1.next : null, l2 != null ? l2.next : null);
		if (ret.val >= 10) {
			ret.val -= 10;
			ret = addbit(ret);
		}
		return ret;
	}

    public ListNode addbit(ListNode l1) {
        ListNode ret = l1.next;
        if (ret==null) {
            ret=new ListNode(1);
        }else{
            ret.val+=1;
            if(ret.val>=10) {
                ret.val-=10;
                ret=addbit(ret);
            }
        }
        l1.next=ret;
        return l1;
    }

}
